perm filename ERROR[NS,SYS] blob sn#118929 filedate 1974-09-10 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00007 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ERROR--The file DEFS must be assembled with this file.
C00003 00003	DATA
C00005 00004	ERROR
C00009 00005	WRITE OUT NEW ERROR FILE
C00011 00006	SEND ME A MESSAGE
C00015 00007	SIXOUT	DECOUT	OCTOUT	ASCOUT	PUT2DG	PT2DG1	UUCODE
C00017 ENDMK
C⊗;
;ERROR--The file DEFS must be assembled with this file.
	TITLE	ERROR handler for News Service system
IFNDEF DEBUG,<DEBUG←←0>

F←0
A←1
B←2
C←3
D←4
E←5

L←6
M←7
N←10

Q←11
R←12

W←13
X←14
Y←15
Z←16

P←17
;DATA

;XWIRES DEFINES NWIRES AND WIRES (FROM DEFS)
XWIRES

CMD:	0↔0			;DUMP MODE INPUT/OUTPUT COMMANDS GO HERE

ERRORF:	SIXBIT	/ERRORS/
	SIXBIT	/TXT/
	0↔0

TT1:	SIXBIT	/CTY/
	[ASCIZ /

ππNEWS SERVICE TROUBLEππ
/]

TT2:	SIXBIT	/CTY/
	BUF

TT3:	SIXBIT	/CTY/
	[ASCIZ/

/]

PTY:	BLOCK	2

LPDL←←30
PDL:	BLOCK	LPDL

TMPBUF:	BLOCK	200	;pty input and partial old record from error file goes here
BUF:	BLOCK	200	;error message goes here

WAKEBK:	SIXBIT	/[-NS-]/
	SIXBIT	/ NSSYS/
	0

MONTH:
FOR MON IN (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)
{	ASCIZ /MON-/
}
;ERROR

ERROR:	EXIT			;STARTED UP BY RUN COMMAND
;EXPECT PROGRAM NAME IN AC 1, UUO IN AC 2, WIRE CODE IN AC 0
	MOVEM	0,WIRCOD#
	MOVEM	A,PRGNAM#
	MOVEM	B,UUO#
	MOVE	P,[IOWD LPDL,PDL]
	MOVE	Q,[POINT 7,BUF]	;BYTE POINTER FOR BUILDING MESSAGE

	ACCTIM	D,		;GET <DATE>,,<TIME IN SECS>
	HLRZ	A,D		;GET DATE
	IDIVI	A,=31		;DAY INTO B, MONTHS IN A
	PUSHJ	P,PT2DG1	;PRINT DAY OF MONTH AS 2 DIGITS
	MOVEI	C,"-"
	IDPB	C,Q
	IDIVI	A,=12		;MONTH INTO B, YEAR INTO A
	MOVEI	B,MONTH(B)	;PTR TO ASCIZ MONTH
	PUSHJ	P,ASCOUT	;PRINT MONTH AS 3 CHARS FOLLOWED BY DASH
	MOVEI	B,=64(A)	;YEAR
	PUSHJ	P,PUT2DG
	MOVEI	C," "
	IDPB	C,Q
	IDPB	C,Q
	MOVEI	A,(D)		;TIME IN SECS
	IDIVI	A,=60		;CONVERT TO MINS
	HRR	D,A		;(SAVE TIME IN MINS FOR WAKEME)
	IDIVI	A,=60		;HOURS IN A, MINS IN B
	EXCH	A,B		;HOURS IN B, MINS IN A
	PUSHJ	P,PUT2DG	;PRINT HOURS
	MOVEI	B,(A)
	PUSHJ	P,PUT2DG	;PRINT MINUTES
	MOVEI	C," "
	IDPB	C,Q
	IDPB	C,Q
	MOVE	B,PRGNAM
	PUSHJ	P,SIXOUT	;PRINT NAME OF PROGRAM GETTING ERROR
	MOVEI	C," "
	IDPB	C,Q
	IDPB	C,Q

	MOVE	A,WIRCOD
	SETZ	B,
	JUMPL	A,.+3
	CAIGE	A,NWIRES	;REASONABLE WIRE CODE HERE?
	MOVE	B,WIRES(A)	;YES
	PUSHJ	P,SIXOU3	;PRINT 3 CHARS
	MOVEI	C," "
	IDPB	C,Q
	IDPB	C,Q

	MOVS	A,UUO		;PICK UP UUO
	ANDI	A,777000	;CLEAR ALL BUT OPCODE
	MOVE	B,['ERRORS']	;FILENAME FOR ERROR MESSAGE
	CAIN	A,(<UWARN>)	;WARNING MESSAGES GO IN DIFFERENT FILE
	MOVE	B,['WARNGS']
	MOVEM	B,ERRORF	;SET NAME OF ERROR MESSAGE FILE
	MOVE	B,['MISC  ']
	CAIE	A,(<UDELAY>)
	CAIN	A,(<UFATAL>)
	MOVE	B,['FATAL ']
	CAIN	A,(<UWARN>)
	MOVE	B,['WARN  ']
	PUSHJ	P,SIXOUT	;PRINT TYPE OF ERROR
	MOVE	B,['ERROR ']
	PUSHJ	P,SIXOUT
	HRRZ	B,UUO		;PICK UP ERROR NUMBER
	PUSHJ	P,OCTOUT	;AND PRINT IT
	CAIE	A,(<UDELAY>)
	JRST	NOWAKE
	MOVEI	B,[ASCIZ /--WILL TRY AGAIN IN /]
	PUSHJ	P,ASCOUT
	LDB	B,[POINT 4,UUO,12] ;PICK UP AMT OF DELAY (AC FIELD OF UUO)
	JUMPN	B,.+2
	SKIPA	B,[=30]		;DEFAULT DELAY IS 30 MINUTES
	IMULI	B,=5		;AC FIELD GIVES DELAY IN UNITS OF 5 MINUTES EACH
	ADDI	D,(B)		;ADD DELAY TO CURRENT TIME
	PUSHJ	P,DECOUT	;PRINT DELAY LENGTH
	MOVEI	B,[ASCIZ / MINS./]
	PUSHJ	P,ASCOUT
	MOVEI	A,=60*=24	;NUMBER OF MINUTES IN A DAY
	CAIG	A,(D)		;DELAYING PAST MIDNIGHT?
	SUB	D,[-1,,=60*=24]	;YES, MAKE IT 24 HRS EARLIER ON NEXT DAY
	MOVEM	D,WAKEBK+2
	MOVEI	A,WAKEBK
	WAKEME	A,
	JFCL

NOWAKE:	MOVEI	C,CR
	IDPB	C,Q
	MOVEI	C,LF
	IDPB	C,Q
	SETZ	C,
	IDPB	C,Q
;WRITE OUT NEW ERROR FILE

	INIT	0,217
	SIXBIT	/DSK/
	0
	JRST	TRYPTY

	MOVE	A,[ERRORF,,W]
	BLT	A,Z
	LOOKUP	0,W
	JRST	NOLOOK
	MOVS	A,Z		;NEGATIVE WORD COUNT
ERR0:	MOVEM	A,GOODLK#	;FLAG: NON-ZERO MEANS LOOKUP SUCCEEDED
	SETZB	Z,Y
	ENTER	0,W
	JRST	TRYPTY
	MOVN	A,A		;POSITIVE WORD COUNT
	SETZ	B,
	LSHC	A,-7
	JUMPE	B,ERR2		;ANY PARTIAL RECORD WE SHOULD COPY?
	ROT	B,7		;YES
	MOVN	B,B		;NEGATIVE WORD COUNT FOR INPUT OPERATION
	HRLI	B,BUF-1(B)	;ADDRESS FOR INPUT
	MOVSM	B,CMD		;DUMP MODE COMMAND
	USETI	0,1(A)
	IN	0,CMD		;READ IN PARTIAL RECORD
	JRST	ERR1
	JRST	TRYPTY

NOLOOK:	TRNE	X,-1		;NON EX FILE?
	EXIT			;NO, GIVE UP

;HERE IS WHERE WE TELL THE CTY THERE IS TROUBLE
IFE DEBUG, <
	MOVEI	A,TT1
	TTYMES	A,
	JFCL
	MOVEI	A,TT2
	TTYMES	A,
	JFCL
	MOVEI	A,TT3
	TTYMES	A,
	JFCL
>;END ¬DEBUG
	SETZ	A,
	JRST	ERR0

ERR2:	MOVEI	B,BUF-1
	MOVEM	B,CMD		;SET UP OUTPUT ADDRESS FOR DUMP MODE COMMAND
ERR1:	USETO	0,1(A)		;RECORD FOR OUTPUT TO COME
	SUB	Q,CMD		;SUBTRACT INITIAL ADDRESS FROM FINAL ADDRESS
	MOVNI	Q,(Q)		;NEGATIVE OUTPUT WORD COUNT
	HRLM	Q,CMD
	OUTPUT	0,CMD
TRYPTY:	RELEAS	0,
;SEND ME A MESSAGE

	PTYGET	PTY
	EXIT

	MOVEI	A,5		;LOGIN PTJOBX CODE
	MOVEM	A,PTY+1
	PTJOBX	PTY		;LOGIN IN THE PTY
	EXIT

	MOVEI	A,3		;DOFF PTJOBX CODE
	MOVEM	A,PTY+1
	PTJOBX	PTY		;TURN OFF ECHOING

	MOVEI	A,[ASCIZ \SEND\]
	MOVEM	A,PTY+1
	PTWRS7	PTY		;SEND AND MAIL ME THE ERROR MESSAGE

	MOVEI	A,[ASCIZ\/M ME \]
	SKIPE	GOODLK#
	MOVEI	A,[ASCIZ\ ME \]	;ERROR FILE ALREADY EXISTS, DON'T DO MAIL
	MOVEM	A,PTY+1
	PTWRS7	PTY

	MOVEI	A,TMPBUF
	MOVEM	A,PTY+1
	PTRDS	PTY		;READ FROM PTY

	MOVEI	A,BUF
	MOVEM	A,PTY+1
	PTWRS7	PTY		;SEND AND MAIL ME THE ERROR MESSAGE

	MOVEI	C,=60		;NUMBER OF SECS WE WILL WAIT FOR PTY TO FINISH
	MOVEI	B,1
FINPTY:	SLEEP	B,
	PTOCNT	PTY
	SKIPN	PTY+1		;ANY CHARS WAITING FOR US
	JRST	FINPT1		;NO
	MOVEI	A,TMPBUF
	MOVEM	A,PTY+1
	PTRDS	PTY		;READ FROM PTY

FINPT1:	MOVEI	A,6
	MOVEM	A,PTY+1
	PTJOBX	PTY		;SKIP IF PTY WAITING FOR INPUT
	SOJG	C,FINPTY
	PTYREL	PTY
	EXIT
;SIXOUT	DECOUT	OCTOUT	ASCOUT	PUT2DG	PT2DG1	UUCODE

SIXOU3:	SKIPA	W,[3]		;PRINT 3 SIXBIT CHARS
SIXOUT:	MOVEI	W,6
SIXOU1:	SETZ	C,
	ROTC	B,6		;CHAR INTO C
	ADDI	C,40		;MAKE INTO ASCII
	IDPB	C,Q
	SOJG	W,SIXOU1
	POPJ	P,

OCTOUT:	IDIVI	B,=8
	HRLM	C,(P)
	JUMPE	B,.+2
	PUSHJ	P,OCTOUT
	HLRZ	C,(P)
	ADDI	C,"0"
	IDPB	C,Q
	POPJ	P,

DECOUT:	IDIVI	B,=10
	HRLM	C,(P)
	JUMPE	B,.+2
	PUSHJ	P,DECOUT
	HLRZ	C,(P)
	ADDI	C,"0"
	IDPB	C,Q
	POPJ	P,

ASCOUT:	TLOA	B,440700	;MAKE A BYTE PTR
	IDPB	C,Q
	ILDB	C,B
	JUMPN	C,.-2
	POPJ	P,

PT2DG1:	ADDI	B,1
PUT2DG:	IDIVI	B,=10
	ADDI	B,"0"
	IDPB	B,Q
	ADDI	C,"0"
	IDPB	C,Q
	POPJ	P,

UUCODE:	0			;CAUSE AN ILLEGAL UUO IF USER UUO EXECUTED

	END	ERROR